package leetcode.day_2020_11_30_12_6;

import leetcode.Head;
import leetcode.ListNode;

public class L_61 {
    public static void main(String[] args) {
        Head.printList(rotateRight(Head.genList(), 2));
    }

    public static ListNode rotateRight(ListNode head, int k) {
        // 头结点
        ListNode root = new ListNode(-1);
        // 生成K个结点，并连接
        ListNode demo = root;
        for(int i=1; i<=k; i++){
            ListNode node = new ListNode(-1, null);
            demo.next = node;
            demo = node;
        }
        demo.next = head;
        // 双指针移动，找到最后K个元素
        ListNode slow = root.next;
        ListNode quick = demo;
        int i = 0;
        while (quick.next !=null ){
            // 右移结点
            quick = quick.next;
            slow = slow.next;

            i++;
        }
        // 判断i是否=k，=说明k<=结点总数
        ListNode curr = root;
        // 从此切断，置尾节点为null；
        ListNode demoSlow = slow;
        if(i >= k){
            // 开始干活
            curr.next = demoSlow;
            quick.next = demo.next;
        }
        slow = null;
        return root.next;
    }
}
